import time

import streamlit as st
from streamlit_pills import pills

audioRecogTab, translateTab, audioGenTab, otherCofigTab = st.tabs(['音频识别配置', '翻译配置', '音频生成配置', '其他配置'])

with audioRecogTab:
    row1col1, row1col2 = st.columns([3,1])
    audio_model = row1col1.selectbox(label='语音识别模型',options=('paraformer-zh',))
    audio_version = row1col2.selectbox(label='版本', options=('master', 'v2.0.4'), key='audio_version')

    with st.container(border=True):
        st.error("启动语音端点检测，减少数据的采集量，节约处理时间，还能排除无声段或噪声段的干扰，提高语音识别系统的性能")
        row2col1, row2col2, row2col3 = st.columns([1,2,1])
        row2col1.checkbox(label='启用', value=True, key='use_vad')
        row2col2.selectbox(label='语音端点检测模型', options=('fsmn-vad',))
        row2col3.selectbox(label='版本', options=('v2.0.4',), key='vad_version')

    with st.container(border=True):
        st.error("标点恢复模型专门针对标点符号进行预测，提高文本的可阅读性")
        row3col1, row3col2, row3col3 = st.columns([1,2,1])
        row3col1.checkbox(label='启用', value=True, key='use_punc')
        row3col2.selectbox(label='标点恢复模型', options=('ct-punc-c',))
        row3col3.selectbox(label='版本', options=('v2.0.4',), key='punc_version')

    with st.container(border=True):
        st.error("在说话人转换点附近精确的定位转换点位置，减少时间误差，改善说话人转换点定位不准的情况")
        row4col1, row4col2, row4col3 = st.columns([1,2,1])
        row4col1.checkbox(label='启用', value=True, key='use_spk')
        row4col2.selectbox(label='说话人特征提取模型', options=('cam++',))
        row4col3.selectbox(label='版本', options=('v2.0.2',), key='spk_version')

with translateTab:
    #目前只考虑本地部署的大模型，使用ollama推理

    with st.container(border=True):
        st.subheader("本地大模型")
        st.info("目前采用ollama进行推理")
        col1, col2 = st.columns([1, 5])
        col1.toggle(label="采用本地大模型", value=True)
        col1.button(label="管理本地大模型", use_container_width=True)

        col2.selectbox(label="本地大模型", options=("qwen2:7b",))
        col2.text_area(label="提示词模板",
                       value='你是一名翻译专家，请将以下内容从{}翻译成{}，输出翻译结果即可，内容如下：{}',
                       height=12,
                       help="提示词模板中第一个占位符{}表示原始视频中说话人语种，第二个占位符{}表示目标说话人语种，第三个占位符表示待翻译内容")

    with st.container(border=True):
        st.subheader("在线大模型")
        st.info("适配OpenAI接口的在线推理服务")

        col1, col2 = st.columns([1, 5])
        col1.toggle(label="采用在线大模型")
        col1.button(label="管理在线大模型", use_container_width=True)
        col2.selectbox(label="在线大模型", options=("kimi",))
        col2.text_input("模型访问地址")
        col2.text_input("模型访问秘钥")

with audioGenTab:
    with st.container(border=True):
        st.subheader("语音参数")
        col1, col2, col3, col4 = st.columns([1,1,1,1])
        col1.slider(label="温度", min_value=0.1, max_value=1.0, value=0.1)
        col2.selectbox(label="语速", options=('speed_01','speed_02','speed_03','speed_04','speed_05','speed_06','speed_07','speed_08','speed_09',))
        col3.slider(label="top_K", min_value=1, max_value=128, value=1)
        col4.slider(label="top_P", min_value=0.0, max_value=1.0, value=0.9)
        selected = pills(label="音色库", options=["男-铿锵有力", "女-铿锵有力", "男-广播员"], key="女-铿锵有力")

    with st.container(border=True):
        st.subheader("音色管理")
        st.text_input(label="测试文本", value="我是一名中国人，我非常自豪")

        cc1, cc2 = st.columns([1,2])
        with cc1.container():
            st.button(label="随机音色")
            st.button(label="音色试听")
            st.button(label="保存到音色库")

        with cc2.container():
            st.text_input(label="音色随机种子")
            st.text_input(label="音色标签")

        sound_bank = pills(label="音色库", options=["男-铿锵有力", "女-铿锵有力", "男-广播员"], )

with otherCofigTab:
    st.toggle("启用GUP")
    st.selectbox(label="GUP列表", options=("cuda:0", "cuda:1"))
